﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using AcadPos.Entity;
using AcadPosApp.Utilidades;
using System.Data;

namespace AcadPosApp.Cadastros
{
    public partial class CadastroCidadePolo : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                carregaEstados();
                validaDropPesquisa();
                pnlPesquisa.Attributes.Add("onkeypress", "return clickButton(event,'" + btnConsultar.ClientID + "')");
                txtCadCidade.Attributes.Add("onkeypress", "return clickButton(event,'" + btnConsultaCidade.ClientID + "')");
                pnlCadastro.Attributes.Add("onkeypress", "return clickButton(event,'" + btnConfirmar.ClientID + "')");                
            }
        }

        private void carregaEstados()
        {
            ddlEstadoPesquisa.DataSource = ControlClass.CNEstado.listaTodosEstados();
            ddlEstadoPesquisa.DataTextField = "ESTADO";
            ddlEstadoPesquisa.DataValueField = "ID_ESTADO";
            ddlEstadoPesquisa.DataBind();
        }

        private void carregaPolo()
        {
            Polo polo = new Polo();
            polo.IdEstado = Convert.ToInt32(ddlEstadoPesquisa.SelectedValue);
            ddlPoloPesquisa.DataSource = ControlClass.CNPolo.listaPolosEstado(polo);
            ddlPoloPesquisa.DataTextField = "DESCRICAO";
            ddlPoloPesquisa.DataValueField = "ID_POLO";
            ddlPoloPesquisa.DataBind();
        }

        protected void ddlEstadoPesquisa_SelectedIndexChanged(object sender, EventArgs e)
        {
            validaDropPesquisa();
        }

        private void validaDropPesquisa()
        {
            if (ddlEstadoPesquisa.SelectedValue != "")
            {
                ddlPoloPesquisa.Enabled = true;
                carregaPolo();
                if (ddlPoloPesquisa.Items.Count == 0)
                    ddlPoloPesquisa.Enabled = false;
            }
            else
            {
                ddlPoloPesquisa.Enabled = false;
                ddlPoloPesquisa.Items.Clear();
            }
        }

        protected void btnConsultar_Click(object sender, EventArgs e)
        {
            carregaGridPesquisa();
        }

        private void carregaGridPesquisa()
        {
            if (ddlPoloPesquisa.Items.Count > 0 && ddlPoloPesquisa.SelectedValue != "")
            {
                gvwPesquisa.Visible = true;
                Polo polo = new Polo();
                polo.IdPolo = Convert.ToInt32(ddlPoloPesquisa.SelectedValue);
                gvwPesquisa.DataSource = ControlClass.CNPolo.listaCidadesPorPolo(polo);
                gvwPesquisa.DataBind();
                gvwPesquisa.SelectedIndex = -1;
            }
            else
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Por favor, selecione um Polo para pesquisar.")), true);
        }

        protected void gvwPesquisa_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            try
            {
                Polo polo = new Polo();
                int index = int.Parse((String)e.CommandArgument);
                polo.IdCidadePolo = Convert.ToInt32(gvwPesquisa.DataKeys[index]["ID_CIDADE_POLO"].ToString());
                polo = ControlClass.CNPolo.retornaCidadePolo(polo);

                if (e.CommandName == "Alterar")
                {
                    pnlCadastro.Visible = true;
                    pnlPesquisa.Enabled = false;
                    txtCadCidade.Enabled = false;
                    gvwCidade.Enabled = false;
                    ddlCadEstado.Enabled = false;
                    carregaEstadosCadastro();
                    
                    ddlCadPolo.DataSource = ControlClass.CNPolo.listaPolosEstado(polo);
                    ddlCadPolo.DataTextField = "DESCRICAO";
                    ddlCadPolo.DataValueField = "ID_POLO";
                    ddlCadPolo.DataBind();
                    ddlCadPolo.Enabled = false;

                    ddlCadEstado.SelectedValue = polo.IdEstado.ToString();
                    ddlCadPolo.SelectedValue = polo.IdPolo.ToString();
                    ddlSituacao.SelectedValue = polo.Situacao;
                    polo.Situacao = ddlSituacao.SelectedValue;

                    DataTable dt = ControlClass.CNPolo.listarCidadePorId(polo.IdCidade);
                    txtCadCidade.Text = dt.Rows[0]["NOME_CIDADE"].ToString();
                    gvwCidade.Visible = true;
                    gvwCidade.DataSource = dt;
                    gvwCidade.DataBind();
                    gvwCidade.SelectedIndex = 0;

                    ViewState["ID_CIDADE_POLO"] = gvwPesquisa.DataKeys[index]["ID_CIDADE_POLO"].ToString();
                    btnConfirmar.CommandName = "Alterar";

                }
                else if (e.CommandName == "Excluir")
                {
                    polo = ControlClass.CNPolo.retornaCidadePolo(polo);
                    pnlCadastro.Visible = false;
                    string usuario = User.Identity.Name;
                    
                    if (ControlClass.CNPolo.excluiCidadePorPolo(polo, usuario))
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoExcluir, "")), true);
                        carregaGridPesquisa();
                        pnlCadastro.Visible = false;
                        pnlPesquisa.Enabled = true;
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Não foi possível realizar a operação. Por favor, tente novamente.")), true);
                    }
                }

            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("FK"))
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.ErroChaveEstrangeira, "")), true);
                else
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, "")), true);
                pnlCadastro.Visible = false;
                pnlPesquisa.Enabled = true;
            }
        }

        protected void gvwPesquisa_RowCreated(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButton l = (ImageButton)e.Row.FindControl("EXCLUIR");
                l.CommandArgument = e.Row.RowIndex.ToString();

                ImageButton button2 = (ImageButton)e.Row.FindControl("ImgAlterar");
                button2.CommandArgument = e.Row.RowIndex.ToString();
            }
        }

        protected void gvwPesquisa_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                foreach (DataControlFieldCell cell in e.Row.Cells)
                {
                    // Verificando todas as colunas da linha
                    foreach (Control control in cell.Controls)
                    {
                        //No caso o botão é do tipo Imagem Button
                        ImageButton button = control as ImageButton;
                        if (button != null && button.CommandName == "Excluir")
                        {
                            // Adicionando a mensagem javascript
                            button.OnClientClick = "return ShowConfirm('Tem certeza que deseja excluir?', '" + button.ClientID + "');";
                        }
                    }
                }
            }
            #region Configurando Imagem do Status
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                e.Row.Cells[4].Visible = true;

                Image controle = (Image)e.Row.FindControl("imgStatus");
                DataRow linha = (e.Row.DataItem as DataRow);
                if ((e.Row.Cells[4].Text.Trim()) == "A")
                    controle.ImageUrl = "~/Imagens/ativo.png";
                else
                    controle.ImageUrl = "~/Imagens/inativo.png";
                e.Row.Cells[4].Visible = false;
            }
            if (e.Row.RowType == DataControlRowType.Header)
            {
                e.Row.Cells[4].Visible = false;
            }
            #endregion
        }

        protected void gvwPesquisa_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            gvwPesquisa.PageIndex = e.NewPageIndex;
            carregaGridPesquisa();
        }

        protected void btnInserir_Click(object sender, EventArgs e)
        {
            TrustX.Util.UtilForm.LimparCampos(pnlPesquisa);
            pnlPesquisa.Enabled = false;
            pnlCadastro.Visible = true;
            carregaEstadosCadastro();
            validaDropCadastro();            
            btnConfirmar.CommandName = "Inserir";
            txtCadCidade.Enabled = true;
            gvwCidade.Enabled = true;
            ddlCadEstado.Enabled = true;
        }
        private void carregaEstadosCadastro()
        {
            ddlCadEstado.DataSource = ControlClass.CNEstado.listaTodosEstados();
            ddlCadEstado.DataTextField = "ESTADO";
            ddlCadEstado.DataValueField = "ID_ESTADO";
            ddlCadEstado.DataBind();
        }

        private void validaDropCadastro()
        {
            if (ddlCadEstado.SelectedValue != "")
            {
                ddlCadPolo.Enabled = true;
                //carregaPoloCadastro();
                Polo polo = new Polo();
                polo.IdEstado = Convert.ToInt32(ddlCadEstado.SelectedValue);
                ddlCadPolo.DataSource = ControlClass.CNPolo.listaPolosEstado(polo);
                ddlCadPolo.DataTextField = "DESCRICAO";
                ddlCadPolo.DataValueField = "ID_POLO";
                ddlCadPolo.DataBind();
                if (ddlCadPolo.Items.Count == 0)
                    ddlCadPolo.Enabled = false;
            }
            else
            {
                ddlCadPolo.Enabled = false;
                ddlCadPolo.Items.Clear();
            }
        }

        //private void carregaPoloCadastro()
        //{
        //    Polo polo = new Polo();
        //    polo.IdEstado = Convert.ToInt32(ddlCadEstado.SelectedValue);
        //    ddlCadPolo.DataSource = ControlClass.CNPolo.listaPolosEstado(polo);
        //    ddlCadPolo.DataTextField = "DESCRICAO";
        //    ddlCadPolo.DataValueField = "ID_POLO";
        //    ddlCadPolo.DataBind();
        //}

        protected void ddlCadEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            validaDropCadastro();
        }

        protected void btnConsultaCidade_Click(object sender, EventArgs e)
        {
            gvwCidade.Visible = true;
            gvwCidade.DataSource = ControlClass.CNPolo.listarCidadesXEstado(Convert.ToInt32(ddlCadEstado.SelectedValue), txtCadCidade.Text);
            gvwCidade.DataBind();
            gvwCidade.SelectedIndex = -1;
        }

        protected void btnConfirmar_Click(object sender, EventArgs e)
        {
            try
            {
                Polo polo = new Polo();
                polo.IdEstado = Convert.ToInt32(ddlCadEstado.SelectedValue);
                polo.IdPolo = Convert.ToInt32(ddlCadPolo.SelectedValue);
                polo.IdCidade = Convert.ToInt32(gvwCidade.SelectedValue);
                polo.Situacao = ddlSituacao.SelectedValue;
                string usuario = User.Identity.Name;

                if ((gvwCidade.Rows.Count > 0 && gvwCidade.SelectedIndex > -1) || ddlCadPolo.Items.Count == 0)
                {
                    if (btnConfirmar.CommandName == "Inserir")
                    {
                        if (ControlClass.CNPolo.insereCidadePorPolo(polo, usuario))
                        {
                            finalizaOperacao();
                            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoInserir, "")), true);
                        }
                    }

                    else if (btnConfirmar.CommandName == "Alterar")
                    {
                        polo.IdCidadePolo = Convert.ToInt32(ViewState["ID_CIDADE_POLO"].ToString());
                        if (ControlClass.CNPolo.alteraCidadePorPolo(polo, polo.IdCidadePolo, usuario))
                        {
                            finalizaOperacao();
                            // pnlPesquisa.Enabled = true;
                            // gvwPesquisa.Visible = false;
                            ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.SucessoAlterar, "")), true);
                        }
                    }
                }
                else
                {
                    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Nada, "Selecione uma Cidade ou um Polo.")), true);
                }
            }
            catch (Exception ex)
            {
                ScriptManager.RegisterStartupScript(Page, Page.GetType(), "Alert", string.Format("alert('{0}');", Alertas.obterMsg((int)EnumAcadPos.Mensagem.Erro, ex.Message.ToString())), true);
            }
        }

        private void finalizaOperacao()
        {
            TrustX.Util.UtilForm.LimparCampos(pnlCadastro);
            pnlPesquisa.Enabled = true;
            gvwPesquisa.Visible = false;
            gvwCidade.Visible = false;
            pnlCadastro.Visible = false;
        }

        protected void btnCancelar_Click(object sender, EventArgs e)
        {
            TrustX.Util.UtilForm.LimparCampos(pnlCadastro);
            gvwCidade.Visible = false;
            pnlCadastro.Visible = false;
            pnlPesquisa.Enabled = true;
        }


    }
}